2023/12/231103字符

在有序的数组里找出指定的值,返回该值在数组中的索引

var arr = [1, 3, 5, 7, 9, 10, 12, 14];
    
function getIndex (arr, val) {
    for (var i = 0; i < arr.length; i++) {
        if(arr[i] == val) {
            return i;
        }
    }
    return -1;
}
getIndex(arr, 5);  //--> 2
getIndex(arr, 15);  //--> -1

二分查找法

// [1,    3,     5,     7,     9,     10,     12,     14]

// start=0          midden=parseInt((start+end)/2)    end=arr.length-1
// start                   end=midden
//                        start=midden                end

function lookup (arr, val) {
    var start = 0;
    var end = arr.length - 1;
    while (start <= end) {
        var midden = parseInt((start + end) / 2);
        if(val == arr[midden]) {
            return midden;
        }else if (val < arr[midden]) {  // 在左边
            end = midden - 1;
        }else if (val > arr[midden]) {  // 在右边
            start = midden + 1;
        }
    }
    return -1;
}
console.log(lookup(arr, 3));  //--> 1